home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 15
/
Aminet 15 - Nov 1996.iso
/
Aminet
/
dev
/
basic
/
ace24dist.lha
/
ace24.lha
/
include
/
dos
/
dosextens.h
< prev
next >
Wrap
C/C++ Source or Header
|
1996-09-10
|
19KB
|
563 lines
#ifndef DOS_DOSEXTENS_H
#define DOS_DOSEXTENS_H 1
/*
** dosextens.h for ACE Basic
**
** Note: Translated to ACE by ConvertC2ACE
** @ MapMeadow Software, Nils Sjoholm
**
**
** Date: 09/02/95
**
**
*/
/*
** This are the StructPointer defines for dosextens.h
*/
#ifndef AssignListPtr
#define AssignListPtr ADDRESS
#endif
#ifndef CliProcListPtr
#define CliProcListPtr ADDRESS
#endif
#ifndef CommandLineInterfacePtr
#define CommandLineInterfacePtr ADDRESS
#endif
#ifndef DevInfoPtr
#define DevInfoPtr ADDRESS
#endif
#ifndef DevProcPtr
#define DevProcPtr ADDRESS
#endif
#ifndef DeviceListPtr
#define DeviceListPtr ADDRESS
#endif
#ifndef DosInfoPtr
#define DosInfoPtr ADDRESS
#endif
#ifndef DosLibraryPtr
#define DosLibraryPtr ADDRESS
#endif
#ifndef DosListPtr
#define DosListPtr ADDRESS
#endif
#ifndef DosPacketPtr
#define DosPacketPtr ADDRESS
#endif
#ifndef ErrorStringPtr
#define ErrorStringPtr ADDRESS
#endif
#ifndef FileHandlePtr
#define FileHandlePtr ADDRESS
#endif
#ifndef FileLockPtr
#define FileLockPtr ADDRESS
#endif
#ifndef ProcessPtr
#define ProcessPtr ADDRESS
#endif
#ifndef RootNodePtr
#define RootNodePtr ADDRESS
#endif
#ifndef SegmentPtr
#define SegmentPtr ADDRESS
#endif
#ifndef StandardPacketPtr
#define StandardPacketPtr ADDRESS
#endif
#ifndef dol_assign_StructPtr
#define dol_assign_StructPtr ADDRESS
#endif
#ifndef dol_handler_StructPtr
#define dol_handler_StructPtr ADDRESS
#endif
#ifndef dol_volume_StructPtr
#define dol_volume_StructPtr ADDRESS
#endif
/*
** End of StructPointer defines for dosextens.h
*/
#ifndef EXEC_TASKS_H
#include <exec/tasks.h>
#endif
#ifndef EXEC_PORTS_H
#include <exec/ports.h>
#endif
#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif
#ifndef EXEC_SEMAPHORES_H
#include <exec/semaphores.h>
#endif
#ifndef DEVICES_TIMER_H
#include <devices/timer.h>
#endif
#ifndef DOS_DOS_H
#include <dos/dos.h>
#endif
/* All DOS processes have this structure */
/* Create and Device Proc returns pointer to the MsgPort in this structure */
/* dev_proc = (STRUCT Process *) (DeviceProc(..) - sizeof(STRUCT Task)) */
STRUCT Process
Task pr_Task
MsgPort pr_MsgPort /* This is ADDRESS address from DOS functions */
SHORTINT pr_Pad /* Remaining variables on 4 byte boundaries */
ADDRESS pr_SegList /* Array of seg lists used by this process */
LONGINT pr_StackSize /* Size of process stack in bytes */
ADDRESS pr_GlobVec /* Global vector for this process (BCPL) */
LONGINT pr_TaskNum /* CLI task number of zero if not a CLI */
ADDRESS pr_StackBase /* Ptr to high memory end of process stack */
LONGINT pr_Result2 /* Value of secondary result from last call */
ADDRESS pr_CurrentDir /* Lock associated with current directory */
ADDRESS pr_CIS /* Current CLI Input Stream */
ADDRESS pr_COS /* Current CLI Output Stream */
ADDRESS pr_ConsoleTask /* Console handler process for current window*/
ADDRESS pr_FileSystemTask /* File handler process for current drive */
ADDRESS pr_CLI /* pointer to CommandLineInterface */
ADDRESS pr_ReturnAddr /* pointer to previous stack frame */
ADDRESS pr_PktWait /* Function to be called when awaiting msg */
ADDRESS pr_WindowPtr /* Window for error printing */
/* following definitions are new with 2.0 */
ADDRESS pr_HomeDir /* Home directory of executing program */
LONGINT pr_Flags /* flags telling dos about process */
ADDRESS pr_ExitCode /* code TO CALL ON EXIT of program OR NULL */
LONGINT pr_ExitData /* Passed as an argument to pr_ExitCode. */
ADDRESS pr_Arguments /* Arguments passed to the process at start */
MinList pr_LocalVars /* Local environment variables */
LONGINT pr_ShellPrivate /* for the use of the current shell */
ADDRESS pr_CES /* Error stream - if NULL, use pr_COS */
END STRUCT /* Process */
/*
* Flags for pr_Flags
*/
#define PRB_FREESEGLIST 0
#define PRF_FREESEGLIST 1
#define PRB_FREECURRDIR 1
#define PRF_FREECURRDIR 2
#define PRB_FREECLI 2
#define PRF_FREECLI 4
#define PRB_CLOSEINPUT 3
#define PRF_CLOSEINPUT 8
#define PRB_CLOSEOUTPUT 4
#define PRF_CLOSEOUTPUT 16
#define PRB_FREEARGS 5
#define PRF_FREEARGS 32
/* The LONGINT SHORTINT address (ADDRESS) of this structure is returned by
* Open() and other routines that return a file. You need only worry
* about this STRUCT to do async io's via PutMsg() instead of
* standard file system calls */
STRUCT FileHandle
MessagePtr fh_Link /* EXEC message */
MsgPortPtr fh_Port /* Reply port for the packet */
MsgPortPtr fh_Type /* Port to do PutMsg() to
* Address is negative if a plain file */
LONGINT fh_Buf
LONGINT fh_Pos
LONGINT fh_End
LONGINT fh_Funcs
#define fh_Func1 fh_Funcs
LONGINT fh_Func2
LONGINT fh_Func3
LONGINT fh_Args
#define fh_Arg1 fh_Args
LONGINT fh_Arg2
END STRUCT /* FileHandle */
/* This is the extension to EXEC Messages used by DOS */
STRUCT DosPacket
MessagePtr dp_Link /* EXEC message */
MsgPortPtr dp_Port /* Reply port for the packet */
/* Must be filled in each send. */
LONGINT dp_Type /* See ACTION_... below and
* 'R' means Read, 'W' means Write to the
* file system */
LONGINT dp_Res1 /* For file system calls this is the result
* that would have been returned by the
* function, e.g. Write ('W') returns actual
* length written */
LONGINT dp_Res2 /* For file system calls this is what would
* have been returned by IoErr() */
/* Device packets common equivalents */
#define dp_Action dp_Type
#define dp_Status dp_Res1
#define dp_Status2 dp_Res2
#define dp_BufAddr dp_Arg1
LONGINT dp_Arg1
LONGINT dp_Arg2
LONGINT dp_Arg3
LONGINT dp_Arg4
LONGINT dp_Arg5
LONGINT dp_Arg6
LONGINT dp_Arg7
END STRUCT /* DosPacket */
/* A Packet does not require the Message to be before it in memory, but
* for convenience it is useful to associate the two.
* Also see the function init_std_pkt for initializing this structure */
STRUCT StandardPacket
_Message sp_Msg
DosPacket sp_Pkt
END STRUCT /* StandardPacket */
/* Packet types */
#define ACTION_NIL 0
#define ACTION_STARTUP 0
#define ACTION_GET_BLOCK 2 /* OBSOLETE */
#define ACTION_SET_MAP 4
#define ACTION_DIE 5
#define ACTION_EVENT 6
#define ACTION_CURRENT_VOLUME 7
#define ACTION_LOCATE_OBJECT 8
#define ACTION_RENAME_DISK 9
#define ACTION_WRITE &H57 /* 'W' */
#define ACTION_READ &H52 /* 'R' */
#define ACTION_FREE_LOCK 15
#define ACTION_DELETE_OBJECT 16
#define ACTION_RENAME_OBJECT 17
#define ACTION_MORE_CACHE 18
#define ACTION_COPY_DIR 19
#define ACTION_WAIT_CHAR 20
#define ACTION_SET_PROTECT 21
#define ACTION_CREATE_DIR 22
#define ACTION_EXAMINE_OBJECT 23
#define ACTION_EXAMINE_NEXT 24
#define ACTION_DISK_INFO 25
#define ACTION_INFO 26
#define ACTION_FLUSH 27
#define ACTION_SET_COMMENT 28
#define ACTION_PARENT 29
#define ACTION_TIMER 30
#define ACTION_INHIBIT 31
#define ACTION_DISK_TYPE 32
#define ACTION_DISK_CHANGE 33
#define ACTION_SET_DATE 34
#define ACTION_SCREEN_MODE 994
#define ACTION_READ_RETURN 1001
#define ACTION_WRITE_RETURN 1002
#define ACTION_SEEK 1008
#define ACTION_FINDUPDATE 1004
#define ACTION_FINDINPUT 1005
#define ACTION_FINDOUTPUT 1006
#define ACTION_END 1007
#define ACTION_SET_FILE_SIZE 1022 /* fast file system only in 1.3 */
#define ACTION_WRITE_PROTECT 1023 /* fast file system only in 1.3 */
/* new 2.0 packets */
#define ACTION_SAME_LOCK 40
#define ACTION_CHANGE_SIGNAL 995
#define ACTION_FORMAT 1020
#define ACTION_MAKE_LINK 1021
/**/
/**/
#define ACTION_READ_LINK 1024
#define ACTION_FH_FROM_LOCK 1026
#define ACTION_IS_FILESYSTEM 1027
#define ACTION_CHANGE_MODE 1028
/**/
#define ACTION_COPY_DIR_FH 1030
#define ACTION_PARENT_FH 1031
#define ACTION_EXAMINE_ALL 1033
#define ACTION_EXAMINE_FH 1034
#define ACTION_LOCK_RECORD 2008
#define ACTION_FREE_RECORD 2009
#define ACTION_ADD_NOTIFY 4097
#define ACTION_REMOVE_NOTIFY 4098
/* Added in V39: */
#define ACTION_EXAMINE_ALL_END 1035
#define ACTION_SET_OWNER 1036
/* Tell a file system to serialize the current volume. This is typically
* done by changing the creation date of the disk. This packet does not take
* any arguments. NOTE: be prepared to handle failure of this packet for
* V37 ROM filesystems.
*/
#define ACTION_SERIALIZE_DISK 4200
/*
* A structure for holding error messages - stored as array with error == 0
* for the last entry.
*/
STRUCT ErrorString
ADDRESS estr_Nums
ADDRESS estr_Strings
END STRUCT
/* DOS library node structure.
* This is the data at positive offsets from the library node.
* Negative offsets from the node is the jump table to DOS functions
* node = (STRUCT DosLibrary *) OpenLibrary( "dos.library" .. ) */
STRUCT DosLibrary
_Library dl_lib
RootNodePtr dl_Root /* Pointer to RootNode, described below */
ADDRESS dl_GV /* Pointer to BCPL global vector */
LONGINT dl_A2 /* BCPL standard register values */
LONGINT dl_A5
LONGINT dl_A6
ErrorStringPtr dl_Errors /* PRIVATE pointer to array of error msgs */
timerequestPtr dl_TimeReq /* PRIVATE pointer to timer request */
LibraryPtr dl_UtilityBase /* PRIVATE ptr to utility library */
LibraryPtr dl_IntuitionBase /* PRIVATE ptr to intuition library */
END STRUCT /* DosLibrary */
/* */
STRUCT RootNode
ADDRESS rn_TaskArray /* [0] is max number of CLI's
* [1] is ADDRESS to process id of CLI 1
* [n] is ADDRESS to process id of CLI n */
ADDRESS rn_ConsoleSegment /* SegList for the CLI */
DateStamp rn_Time /* Current time */
LONGINT rn_RestartSeg /* SegList for the disk validator process */
ADDRESS rn_Info /* Pointer to the Info structure */
ADDRESS rn_FileHandlerSegment /* segment for a file handler */
MinList rn_CliList /* new list of all CLI processes */
/* the first cpl_Array is also rn_TaskArray */
MsgPortPtr rn_BootProc /* private ptr to msgport of boot fs */
ADDRESS rn_ShellSegment /* seglist for Shell (for NewShell) */
LONGINT rn_Flags /* dos flags */
END STRUCT /* RootNode */
#define RNB_WILDSTAR 24
#define RNF_WILDSTAR (16777216&)
#define RNB_PRIVATE1 1 /* private for dos */
#define RNF_PRIVATE1 2
/* ONLY to be allocated by DOS! */
STRUCT CliProcList
MinNode cpl_Node
LONGINT cpl_First /* number of first entry in array */
ADDRESS cpl_Array
/* [0] is max number of CLI's in this entry (n)
* [1] is CPTR to process id of CLI cpl_First
* [n] is CPTR to process id of CLI cpl_First+n-1
*/
END STRUCT
STRUCT DosInfo
ADDRESS di_McName /* PRIVATE: system resident module list */
#define di_ResList di_McName
ADDRESS di_DevInfo /* Device List */
ADDRESS di_Devices /* Currently zero */
ADDRESS di_Handlers /* Currently zero */
ADDRESS di_NetHand /* Network handler processid currently zero */
SignalSemaphore di_DevLock /* do NOT access directly! */
SignalSemaphore di_EntryLock /* do NOT access directly! */
SignalSemaphore di_DeleteLock /* do NOT access directly! */
END STRUCT /* DosInfo */
/* structure for the Dos resident list. Do NOT allocate these, use */
/* AddSegment(), and heed the warnings in the autodocs! */
STRUCT Segment
ADDRESS seg_Next
LONGINT seg_UC
ADDRESS seg_Seg
STRING seg_Name SIZE 4 /* actually the first 4 chars of ADDRESS name */
END STRUCT
#define CMD_SYSTEM -1
#define CMD_INTERNAL -2
#define CMD_DISABLED -999
/* DOS Processes started from the CLI via RUN or NEWCLI have this additional
* set to data associated with them */
STRUCT CommandLineInterface
LONGINT cli_Result2 /* Value of IoErr from last command */
ADDRESS cli_SetName /* Name of current directory */
ADDRESS cli_CommandDir /* Head of the path locklist */
LONGINT cli_ReturnCode /* Return code from last command */
ADDRESS cli_CommandName /* Name of current command */
LONGINT cli_FailLevel /* Fail level (set by FAILAT) */
ADDRESS cli_Prompt /* Current prompt (set by PROMPT) */
ADDRESS cli_StandardInput /* Default (terminal) CLI input */
ADDRESS cli_CurrentInput /* Current CLI input */
ADDRESS cli_CommandFile /* Name of EXECUTE command file */
LONGINT cli_Interactive /* Boolean True if prompts required */
LONGINT cli_Background /* Boolean True if CLI created by RUN */
ADDRESS cli_CurrentOutput /* Current CLI output */
LONGINT cli_DefaultStack /* Stack size to be obtained in LONGINT words */
ADDRESS cli_StandardOutput /* Default (terminal) CLI output */
ADDRESS cli_Module /* SegList of currently loaded command */
END STRUCT /* CommandLineInterface */
/* This structure can take on different values depending on whether it is
* a device, an assigned directory, or a volume. Below is the structure
* reflecting volumes only. Following that is the structure representing
* only devices. Following that is the unioned structure representing all
* the values
*/
/* structure representing a volume */
STRUCT DeviceList
ADDRESS dl_Next /* ADDRESS to next device list */
LONGINT dl_Type /* see DLT below */
MsgPortPtr dl_Task /* ptr to handler task */
ADDRESS dl_Lock /* not for volumes */
DateStamp dl_VolumeDate /* creation date */
ADDRESS dl_LockList /* outstanding locks */
LONGINT dl_DiskType /* 'DOS', etc */
LONGINT dl_unused
ADDRESS dl_Name /* ADDRESS to bcpl name */
END STRUCT
/* device structure (same as the DeviceNode structure in filehandler.h) */
STRUCT DevInfo
ADDRESS dvi_Next
LONGINT dvi_Type
ADDRESS dvi_Task
ADDRESS dvi_Lock
ADDRESS dvi_Handler
LONGINT dvi_StackSize
LONGINT dvi_Priority
LONGINT dvi_Startup
ADDRESS dvi_SegList
ADDRESS dvi_GlobVec
ADDRESS dvi_Name
END STRUCT
/* combined structure for devices, assigned directories, volumes */
STRUCT dol_handler_Struct
ADDRESS dol_Handler
LONGINT dol_StackSize
LONGINT dol_Priority
LONGINT dol_Startup
ADDRESS dol_SegList
ADDRESS dol_GlobVec
END STRUCT
STRUCT dol_volume_Struct
DateStamp dol_VolumeDate
ADDRESS dol_LockList
LONGINT dol_DiskType
END STRUCT
STRUCT dol_assign_Struct
ADDRESS dol_AssignName
AssignListPtr dol_List
END STRUCT
STRUCT DosList
ADDRESS dol_Next /* ADDRESS to next device on list */
LONGINT dol_Type /* see DLT below */
MsgPortPtr dol_Task /* ptr to handler task */
ADDRESS dol_Lock
STRING dol_Misc SIZE 24
ADDRESS dol_Name /* ADDRESS to bcpl name */
END STRUCT
/* structure used for multi-directory assigns. AllocVec()ed. */
STRUCT AssignList
AssignListPtr al_Next
ADDRESS al_Lock
END STRUCT
/* definitions for dl_Type */
#define DLT_DEVICE 0
#define DLT_DIRECTORY 1 /* assign */
#define DLT_VOLUME 2
#define DLT_LATE 3 /* late-binding assign */
#define DLT_NONBINDING 4 /* non-binding assign */
#define DLT_PRIVATE -1 /* for internal use only */
/* structure return by GetDeviceProc() */
STRUCT DevProc
MsgPortPtr dvp_Port
ADDRESS dvp_Lock
LONGINT dvp_Flags
DosListPtr dvp_DevNode /* DON'T TOUCH OR USE! */
END STRUCT
/* definitions for dvp_Flags */
#define DVPB_UNLOCK 0
#define DVPF_UNLOCK (1&)
#define DVPB_ASSIGN 1
#define DVPF_ASSIGN (2&)
/* Flags to be passed to LockDosList(), etc */
#define LDB_DEVICES 2
#define LDF_DEVICES (4&)
#define LDB_VOLUMES 3
#define LDF_VOLUMES (8&)
#define LDB_ASSIGNS 4
#define LDF_ASSIGNS (16&)
#define LDB_ENTRY 5
#define LDF_ENTRY (32&)
#define LDB_DELETE 6
#define LDF_DELETE (64&)
/* you MUST specify one of LDF_READ or LDF_WRITE */
#define LDB_READ 0
#define LDF_READ (1&)
#define LDB_WRITE 1
#define LDF_WRITE (2)
/* actually all but LDF_ENTRY (which is used for internal locking) */
#define LDF_ALL (LDF_DEVICES OR LDF_VOLUMES OR LDF_ASSIGNS)
/* a lock structure, as returned by Lock() or DupLock() */
STRUCT FileLock
ADDRESS fl_Link /* bcpl pointer to next lock */
LONGINT fl_Key /* disk block number */
LONGINT fl_Access /* exclusive or shared */
MsgPortPtr fl_Task /* handler task's port */
ADDRESS fl_Volume /* ADDRESS to DLT_VOLUME DosList entry */
END STRUCT
/* error report types for ErrorReport() */
#define REPORT_STREAM 0 /* a stream */
#define REPORT_TASK 1 /* a process - unused */
#define REPORT_LOCK 2 /* a lock */
#define REPORT_VOLUME 3 /* a volume node */
#define REPORT_INSERT 4 /* please insert volume */
/* Special error codes for ErrorReport() */
#define ABORT_DISK_ERROR 296 /* Read/write error */
#define ABORT_BUSY 288 /* You MUST replace... */
/* types for initial packets to shells from run/newcli/execute/system. */
/* For shell-writers only */
#define RUN_EXECUTE -1
#define RUN_SYSTEM -2
#define RUN_SYSTEM_ASYNCH -3
/* Types for fib_DirEntryType. NOTE that both USERDIR and ROOT are */
/* directories, and that directory/file checks should use <0 and >=0. */
/* This is not necessarily exhaustive! Some handlers may use other */
/* values as needed, though <0 and >=0 should remain as supported as */
/* possible. */
#define ST_ROOT 1
#define ST_USERDIR 2
#define ST_SOFTLINK 3 /* looks like dir, but may point to a file! */
#define ST_LINKDIR 4 /* hard link to dir */
#define ST_FILE -3 /* must be negative for FIB! */
#define ST_LINKFILE -4 /* hard link to file */
#define ST_PIPEFILE -5 /* for pipes that support ExamineFH */
#endif /* DOS_DOSEXTENS_H */